const fs = require('fs');
const path = require('path');

/**
 * 递归复制目录
 * @param {string} src 源目录
 * @param {string} dest 目标目录
 */
function copyDir(src, dest) {
  try {
    // 确保目标目录存在
    if (!fs.existsSync(dest)) {
      fs.mkdirSync(dest, { recursive: true });
    }

    // 读取源目录
    const files = fs.readdirSync(src);

    files.forEach(file => {
      const srcPath = path.join(src, file);
      const destPath = path.join(dest, file);

      const stat = fs.statSync(srcPath);

      if (stat.isDirectory()) {
        copyDir(srcPath, destPath);
      } else {
        fs.copyFileSync(srcPath, destPath);
      }
    });

    console.log(`✓ 已复制 ${src} 到 ${dest}`);
  } catch (error) {
    console.error(`复制 ${src} 到 ${dest} 时出错:`, error.message);
    process.exit(1);
  }
}

// 复制 resource/html 目录到 out 和 dist 目录
const htmlSrc = path.join(__dirname, '..', 'resource', 'html');
const llmConfigSrc = path.join(__dirname, '..', 'core', 'llm-config.json');
const toolsSrc = path.join(__dirname, '..', 'tools');

const targets = [
  {
    name: 'out',
    htmlPath: path.join(__dirname, '..', 'out', 'src', 'resource', 'html'),
    llmConfigPath: path.join(__dirname, '..', 'out', 'core'),
    toolsPath: path.join(__dirname, '..', 'out', 'tools')
  },
  {
    name: 'dist',
    htmlPath: path.join(__dirname, '..', 'dist', 'resource', 'html'),
    llmConfigPath: path.join(__dirname, '..', 'dist', 'core'),
    toolsPath: path.join(__dirname, '..', 'dist', 'tools')
  }
];

console.log('🔧 开始复制资源文件...');

// 复制 HTML 文件
if (fs.existsSync(htmlSrc)) {
  targets.forEach(target => {
    console.log(`\n📁 复制HTML文件到 ${target.name} 目录...`);
    copyDir(htmlSrc, target.htmlPath);
    
    // 验证复制的文件
    const loginHtmlFiles = ['login.html', 'loginFailed.html', 'loginSuccess.html'];
    let foundCount = 0;
    
    loginHtmlFiles.forEach(fileName => {
      const filePath = path.join(target.htmlPath, fileName);
      if (fs.existsSync(filePath)) {
        console.log(`  ✓ 确认文件存在: ${fileName}`);
        foundCount++;
      } else {
        console.warn(`  ⚠ 警告: 文件不存在 ${fileName}`);
      }
    });
    
    console.log(`✅ ${target.name} 目录中找到 ${foundCount}/${loginHtmlFiles.length} 个登录文件`);
  });
} else {
  console.error('❌ 错误: resource/html 目录不存在');
  process.exit(1);
}

// 复制 LLM 配置文件
if (fs.existsSync(llmConfigSrc)) {
  console.log('\n📁 复制 LLM 配置文件...');
  targets.forEach(target => {
    // 确保目标目录存在
    if (!fs.existsSync(target.llmConfigPath)) {
      fs.mkdirSync(target.llmConfigPath, { recursive: true });
    }
    
    const destPath = path.join(target.llmConfigPath, 'llm-config.json');
    fs.copyFileSync(llmConfigSrc, destPath);
    
    if (fs.existsSync(destPath)) {
      console.log(`  ✓ 已复制到 ${target.name}/core/llm-config.json`);
    } else {
      console.warn(`  ⚠ 警告: 复制失败 ${destPath}`);
    }
  });
} else {
  console.error('❌ 错误: core/llm-config.json 文件不存在');
  process.exit(1);
}

// 复制 tree-sitter WASM 文件
if (fs.existsSync(toolsSrc)) {
  console.log('\n📁 复制 tree-sitter WASM 文件...');
  targets.forEach(target => {
    copyDir(toolsSrc, target.toolsPath);
    
    const wasmFiles = ['tree-sitter.wasm', 'tree-sitter-c.wasm', 'tree-sitter-cpp.wasm'];
    let foundCount = 0;
    
    wasmFiles.forEach(fileName => {
      const filePath = path.join(target.toolsPath, fileName);
      if (fs.existsSync(filePath)) {
        console.log(`  ✓ 确认文件存在: ${fileName}`);
        foundCount++;
      } else {
        console.warn(`  ⚠ 警告: 文件不存在 ${fileName}`);
      }
    });
    
    console.log(`✅ ${target.name} 目录中找到 ${foundCount}/${wasmFiles.length} 个 WASM 文件`);
  });
} else {
  console.warn('⚠ 警告: tools 目录不存在，跳过 WASM 文件复制');
}

// 复制知识库文件（Fuzz和Unittest深度学习分析）
console.log('\n📁 复制知识库文件...');
const knowledgeFiles = [
  { name: 'fuzz-deep-analysis.json', desc: 'Fuzz深度学习' },
  { name: 'unittest-deep-analysis.json', desc: 'Unittest深度学习' }
];

knowledgeFiles.forEach(file => {
  const srcPath = path.join(__dirname, '..', 'core', 'knowledge', file.name);
  if (fs.existsSync(srcPath)) {
    targets.forEach(target => {
      const knowledgeDir = path.join(target.llmConfigPath, 'knowledge');
      if (!fs.existsSync(knowledgeDir)) {
        fs.mkdirSync(knowledgeDir, { recursive: true });
      }
      
      const destPath = path.join(knowledgeDir, file.name);
      fs.copyFileSync(srcPath, destPath);
      
      if (fs.existsSync(destPath)) {
        const stats = fs.statSync(destPath);
        const sizeMB = (stats.size / 1024 / 1024).toFixed(2);
        console.log(`  ✓ ${file.desc}: ${sizeMB} MB (${target.name})`);
      }
    });
  } else {
    console.log(`  ⚠️  ${file.desc}文件不存在，跳过`);
  }
});

console.log('\n🎉 所有资源文件复制完成！'); 